home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr44 / 2m30src.zip / 2MFKIT.ASM < prev    next >
Assembly Source File  |  1995-03-06  |  5KB  |  129 lines

  1.  
  2. ;┌───────────────────────────────────────────────────────────────────┐
  3. ;│                                                                   │
  4. ;│                 █████ █   █ █▀▀▀▀ █   █ ▀▀█▀▀ ▀▀█▀▀               │
  5. ;│                     █ ██ ██ █     █  █    █     █                 │
  6. ;│                 █████ █ █ █ █▀▀   █▀█     █     █                 │
  7. ;│                 █     █   █ █     █  █    █     █                 │
  8. ;│                 █████ █   █ █     █   █ ▄▄█▄▄   █                 │
  9. ;│                                                                   │
  10. ;│        FICHERO CON CODIGO ENSAMBLADOR LINKABLE CON 2MF.C          │
  11. ;│                                                                   │
  12. ;│       Código de 2M que será almacenado en los sectores de         │
  13. ;│       los disquetes, sectores de arranque de los mismos y         │
  14. ;│       algunas funciones ASM de utilidad.                          │
  15. ;│                                                                   │
  16. ;│  Proceso:                                                         │
  17. ;│                                                                   │
  18. ;│    TASM    2MFKIT  /m5 /mx                                        │
  19. ;│                                                                   │
  20. ;│    El fichero 2MFBOOT.DB que se carga con INCLUDE debe obtenerse  │
  21. ;│    previamente a partir de 2MFBOOT.ASM con ayuda de 2MFBMAKE.BAS  │
  22. ;│                                                                   │
  23. ;└───────────────────────────────────────────────────────────────────┘
  24.  
  25.                PUBLIC  _Boot2mCode, _Boot2mLong
  26.                PUBLIC  _biosdsk,    _PicoRetardo, _NuevaInt24
  27.                PUBLIC  _BootHDPrg, _BootHDPrgLong
  28.                PUBLIC  _BootDDPrg, _BootDDPrgLong
  29.  
  30.  
  31. _DATA          SEGMENT WORD PUBLIC 'DATA'
  32.                ASSUME  CS:_DATA, DS:_DATA
  33.  
  34. ; ------------ Código 2M para grabar en los 5 sectores ocultos de los
  35. ;              disquetes de alta densidad al formatear.
  36.  
  37. _Boot2mCode:   INCLUDE 2MFBOOT.DB
  38. _Boot2mLong    DW    $-OFFSET _Boot2mCode
  39.  
  40. ; ------------ Sectores de arranque de los disquetes 2M.
  41.  
  42. _BootHDPrg:    INCLUDE 2MBOOTHD.INC
  43. _BootHDPrgLong DW    $-OFFSET _BootHDPrg
  44.  
  45. _BootDDPrg:    INCLUDE 2MBOOTDD.INC
  46. _BootDDPrgLong DW    $-OFFSET _BootDDPrg
  47.  
  48. _DATA          ENDS
  49.  
  50.  
  51. _TEXT          SEGMENT WORD PUBLIC 'TEXT'
  52.                ASSUME  CS:_TEXT, DS:_TEXT
  53.  
  54. ; ------------ Rutina de acceso a disco vía BIOS. No se utiliza la
  55. ;              función biosdisk() del compilador porque en algunas
  56. ;              versiones del mismo hace tonterías que no debe. Así,
  57. ;              además, se puede llamar a INT 13h con CALL (bueno,
  58. ;              con RETF) para que dentro de WINDOWS 2MF /M no de
  59. ;              problemas; además, la función de formateo de 2M
  60. ;              requiere SI="2M" al llamar.
  61.  
  62. _biosdsk       PROC  FAR
  63.                PUSH  BP
  64.                MOV   BP,SP
  65.                PUSH  ES
  66.                PUSH  SI
  67.                PUSH  DI
  68.                PUSHF                   ; estructura para futuro IRET
  69.                PUSH  CS
  70.                LEA   AX,bdsk_ret
  71.                PUSH  AX
  72.                XOR   AX,AX
  73.                MOV   ES,AX
  74.                PUSH  ES:[13h*4+2]      ; INT 13h -> pila
  75.                PUSH  ES:[13h*4]
  76.                MOV   AH,[BP+6]
  77.                MOV   DL,[BP+8]
  78.                MOV   DH,[BP+10]
  79.                MOV   CH,[BP+12]
  80.                MOV   CL,[BP+14]
  81.                MOV   AL,[BP+16]
  82.                LES   BX,DWORD PTR [BP+18]
  83.                MOV   SI,"2M"
  84.                RETF                    ; ejecutar INT 13h
  85. bdsk_ret:      POP   DI
  86.                POP   SI
  87.                POP   ES
  88.                POP   BP
  89.                MOV   AL,AH             ; resultado
  90.                MOV   AH,0
  91.                RET
  92. _biosdsk       ENDP
  93.  
  94. ; ------------ Pequeño retardo de medio milisegundo.
  95.  
  96. _PicoRetardo   PROC  FAR
  97.                PUSH  AX
  98.                PUSHF
  99.                POP   AX
  100.                OR    AH,70h
  101.                PUSH  AX
  102.                POPF
  103.                PUSHF
  104.                POP   AX
  105.                AND   AH,0F0h
  106.                CMP   AH,0F0h           ; ¿es PC/XT?
  107.                JE    xt
  108.                MOV   CX,33             ; 18÷1193180*33*1000 = 0.5 ms
  109. wrf:           IN    AL,61h
  110.                AND   AL,10h
  111.                CMP   AL,AH
  112.                JE    wrf          ; esperar pulso refresco memoria
  113.                MOV   AH,AL
  114.                LOOP  wrf
  115. xt:            POP   AX
  116.                RET
  117. _PicoRetardo   ENDP
  118.  
  119. ; ------------ Nuevo gestor de errores críticos.
  120.  
  121. _NuevaInt24    PROC
  122.                MOV   AL,3      ; error en la función DOS invocada.
  123.                IRET
  124. _NuevaInt24    ENDP
  125.  
  126. _TEXT          ENDS
  127.  
  128.                END
  129.